
import { markRaw, ref, effectScope } from 'vue'
import { setActivePinia, SymbolPinia } from './rootStore'
export function createPinia() {
  const scope = effectScope(true);
  const state = scope.run(() => ref({}));
  const _p = []; // 存放 use 的插件容器
  // markRaw 防止用户传递的参数是 响应式的
  const pinia = markRaw({
    // app 就是 createApp 返回的实例
    install(app) {
      setActivePinia(pinia); // 配合 optionsApi 的  mapActions 使用
      app.provide(SymbolPinia, pinia);
      // 兼容 vue2 实例挂载 $pinia
      app.config.globalProperties.$pinia = pinia;
    },
    use(plugin) {
      _p.push(plugin);
      return this;
    },
    _a: app,
    _p,
    state,
    _e: scope,
    _s: new Map()
  })

  return pinia;
}